home *** CD-ROM | disk | FTP | other *** search
/ Animation How-To / Animation How-to CD.iso / PLY / CHAPTER8 / FAN / FAN.BAS next >
BASIC Source File  |  1994-01-01  |  2KB  |  115 lines

  1. ' FAN.BAS
  2.  
  3. DECLARE SUB Branch (x1, y1, height, level)
  4. DECLARE FUNCTION Ang (x1, y1, x2, y2)
  5. COMMON SHARED rad, theta, scale, angle, k, twig
  6.  
  7. SCREEN 12
  8. WINDOW (-64, -10)-(64, 86)
  9.     angle = 10
  10.     twig = 10
  11.  
  12. frame = 0
  13.  
  14. OPEN "anim.bat" FOR OUTPUT AS #2
  15.  
  16. FOR sc = .6 TO .86 STEP .01
  17.  
  18.   frame = frame + 1
  19.   inc$ = "fan" + RIGHT$("00" + LTRIM$(STR$(frame)), 2) + ".inc"
  20.   tga$ = "fan" + RIGHT$("00" + LTRIM$(STR$(frame)), 2) + ".tga"
  21.  
  22.   PRINT #2, "echo include "; CHR$(34); inc$; CHR$(34); " > anim.inc"
  23.   PRINT #2, "\ply\polyray fan.pi -o "; tga$
  24.  
  25.   OPEN inc$ FOR OUTPUT AS #1
  26.  
  27.     scale = sc ^ .5
  28.     rad = 3.14159 / 180
  29.  
  30.     height = 10
  31.     twig = twig - .2
  32.     angle = angle + .5
  33.     level = 8
  34.  
  35.     x1 = 0
  36.     y1 = 0
  37.  
  38.     x2 = 0
  39.     y2 = y1 + height
  40.  
  41.     LINE (x1, y1)-(x2, y2)
  42.     PRINT #1, "object {"
  43.     PRINT #1, USING "   object {cone <###.###,###.###,###.###>,###.###,<###.###,###.###,###.###>,###.### matte__white }"; x1, y1, 0, height * scale / twig, x2, y2, 0, height * scale * scale / twig
  44.  
  45.       ' Left Hand Sides
  46.     theta = Ang(x1, y1, x2, y2)
  47.     theta = theta + angle
  48.     levelsave = level
  49.     CALL Branch(x2, y2, scale * height, level)
  50.     level = levelsave
  51.  
  52.   ' Right Hand Sides
  53.     theta = Ang(x1, y1, x2, y2)
  54.     theta = theta - angle
  55.     CALL Branch(x2, y2, scale * height, level)
  56.     FOR w = 1 TO 100000: NEXT w
  57.     CLS
  58.   PRINT #1, "}"
  59.   CLOSE #1
  60. NEXT sc
  61. CLOSE #2
  62.  
  63. FUNCTION Ang (x1, y1, x2, y2)
  64.  
  65. ' returns the angle  of a vector with respect to the x-axis
  66.  
  67.     IF ((x2 - x1) = 0) THEN
  68.         IF (y2 > y1) THEN
  69.             theta = 90
  70.         ELSE
  71.             theta = 270
  72.       END IF
  73.     ELSE
  74.         theta = ATN((y2 - y1) / (x2 - x1)) / rad
  75.   END IF
  76.  
  77.   IF (x1 > x2) THEN theta = theta + 180
  78.   Ang = theta
  79.  
  80. END FUNCTION
  81.  
  82. SUB Branch (x1, y1, height, level)
  83.  
  84.     x = x1
  85.     y = y1
  86.     
  87.     x = x + height * COS(theta * rad)
  88.     y = y + height * SIN(theta * rad)
  89.  
  90.     x2 = x
  91.     y2 = y
  92.  
  93.     level = level - 1
  94.  
  95.     LINE (x1, y1)-(x2, y2), 15
  96.     PRINT #1, USING " + object {cone <###.###,###.###,###.###>,###.###,<###.###,###.###,###.###>,###.### matte__white }"; x1, y1, 0, height * scale / twig, x2, y2, 0, height * scale * scale / twig
  97.  
  98.     IF (level > 0) THEN
  99.              ' Left Hand Sides
  100.         theta = Ang(x1, y1, x2, y2)
  101.         theta = theta + angle
  102.         levelsave = level
  103.         CALL Branch(x2, y2, scale * height, level)
  104.         level = levelsave
  105.  
  106.    ' Right Hand Sides
  107.         theta = Ang(x1, y1, x2, y2)
  108.         theta = theta - angle
  109.         levelsave = level
  110.         CALL Branch(x2, y2, scale * height, level)
  111.         level = levelsave
  112.   END IF
  113. END SUB
  114.  
  115.